//***********************************冒泡排序***************************************
//最好时间复杂度O(n)，最坏O(n²)
// 空间复杂度O(1)
function bubbleSort(arr) {
  //暂存变量
  let temp
  //趟数记录
  let cir = 0
  //零交换标志：若发现
  let flag = true
  //趟数控制，一共length-1趟
  for (; cir < arr.length - 1 && flag === true; cir++) {
    //开始前标识符置false，若下面的循环没有发生交换（零交换），则不需要再排序了
    flag = false
    //每趟比较次数为 总个数减去趟数
    for (let i = 0; i < arr.length - 1 - cir; i++) {
      if (arr[i] > arr[i + 1]) {
        flag = true
        //交换操作
        temp = arr[i]
        arr[i] = arr[i + 1]
        arr[i + 1] = temp
      }
    }
  }
}
// 测试用例
let arr = [49, 38, 65, 97, 76, 13, 27, 30]
bubbleSort(arr)
console.log(arr);

